#ifndef _JUNIX_H
#define _JUNIX_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <time.h>
#include <stdarg.h>
#include <mcheck.h>
#include <malloc.h>
#include <locale.h>
#include <assert.h>
#include <error.h>
#include <math.h>
#include <getopt.h>

#include <unistd.h>
#include <limits.h>
#include <fcntl.h>
#include <pwd.h>
#include <poll.h>
#include <ftw.h>
#include <utmp.h>
#include <utime.h>
#include <sys/epoll.h>
#include <sys/syscall.h>
#include <signal.h>
#include <errno.h>
#include <curses.h>
#include <termios.h>
#include <semaphore.h>
#include <glob.h>
#include <regex.h>
#include <fnmatch.h>
#include <syslog.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/inotify.h>
#include <sys/types.h>
#include <sys/resource.h>
#include <sys/utsname.h>
#include <sys/select.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#include<sys/types.h>
#include<sys/socket.h>
#include<sys/time.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<sys/uio.h>
#include<sys/un.h>
#include<sys/select.h>

//#define _GNU_SOURCE
namespace jsearch
{

#define  BUFSIZE 8192
#define  FILE_MODE 0644
#define  DIR_MODE 0755
#define  OPEN_MAX 1024

#define open_max()\
	sysconf(_SC_OPEN_MAX)

#define xstrdupa(s)                                                            \
	(__extension__                                                            \
	 ({                                                                       \
	  __const char *__old = (s);                                              \
	  size_t __len = strlen (__old) + 1;                                      \
	  char *__new = (char *) __builtin_alloca (__len);                        \
	  (char *) memcpy (__new, __old, __len);                                  \
	  }))


	void err_sys(const char *fmt, ...);
	void err_quit(const char *fmt, ...);
	void err_ret(const char *fmt, ...);

	int Open(const char *path, int oflag, ... );
	int Close(int fd);
	ssize_t Read(int fd, char *buf, size_t len);
	ssize_t Write(int fd, char *buf, ssize_t  len);
	off_t Lseek(int fd, off_t offset, int where);


	int Select(int maxfd, fd_set *rdset, fd_set *wrset,
			fd_set *exset, struct timeval *tv);
	int Dup2 (int o, int n);
	char *readline(int fd,char *buf, size_t sz);
	ssize_t readn(int fd, char *buf, size_t sz);
	ssize_t writen(int fd, char *buf, ssize_t sz);

}
#endif
